package com.ruoyi.mdm.service.impl;

import java.util.List;

import com.ruoyi.mdm.domain.SkuChannelScore;
import com.ruoyi.mdm.mapper.SkuChannelScoreMapper;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import com.ruoyi.mdm.mapper.SkuMetricsScoreMapper;
import com.ruoyi.mdm.domain.SkuMetricsScore;
import com.ruoyi.mdm.service.ISkuMetricsScoreService;

/**
 * 产品指标得分Service业务层处理
 *
 * @author shiseido
 * @date 2025-03-07
 */
@Service
public class SkuMetricsScoreServiceImpl implements ISkuMetricsScoreService {
    @Autowired
    private SkuMetricsScoreMapper skuMetricsScoreMapper;

    @Autowired
    private SkuChannelScoreMapper skuChannelScoreMapper;

    /**
     * 定时任务计算产品指标得分
     *
     * @return 产品指标得分
     */
    @Override
    public void calculateSkuMetricsScore() {

        // 先删除所有 指标得分
        skuMetricsScoreMapper.deleteAllSkuMetricsScore();
        // 检索所有 指标得分
        List<SkuMetricsScore> skuMetricsScoreList = skuMetricsScoreMapper.calculateSkuMetricsScoreList();
        // 插入所有 指标得分
        skuMetricsScoreMapper.insertSkuMetricsScoreList(skuMetricsScoreList);

        // 先删除所有 渠道产品得分
        skuChannelScoreMapper.deleteAllSkuChannelScore();
        // 检索所有 渠道产品得分
        List<SkuChannelScore> skuChannelScoreList = skuChannelScoreMapper.calculateSkuChannelScoreList();
        if(!skuChannelScoreList.isEmpty()){
            // 插入所有 渠道产品得分
            skuChannelScoreMapper.insertSkuChannelScoreList(skuChannelScoreList);
        }


    }

    /**
     * 计算单独某个产品指标得分
     *
     * @return 产品指标得分
     */
    @Override
    public void calculateSkuCodeMetricsScore(String ownerId, String skuCode) {

        // 先删除所有 指标得分
        skuMetricsScoreMapper.deleteSkuCodeMetricsScore(ownerId, skuCode);
        // 检索所有 指标得分
        List<SkuMetricsScore> skuMetricsScoreList = skuMetricsScoreMapper.calculateSkuCodeMetricsScoreList(
                ownerId, skuCode);

        if (null != skuMetricsScoreList && !skuMetricsScoreList.isEmpty()){
            // 插入所有 指标得分
            skuMetricsScoreMapper.insertSkuMetricsScoreList(skuMetricsScoreList);
        }

        // 先删除所有 渠道产品得分
        skuChannelScoreMapper.deleteSkuCodeChannelScore(ownerId, skuCode);
        // 检索所有 渠道产品得分
        List<SkuChannelScore> skuChannelScoreList = skuChannelScoreMapper.calculateSkuCodeChannelScoreList(
                ownerId, skuCode);
        if(!skuChannelScoreList.isEmpty()){
            // 插入所有 渠道产品得分
            skuChannelScoreMapper.insertSkuChannelScoreList(skuChannelScoreList);
        }
    }

    /**
     * 查询产品指标得分
     *
     * @param id 产品指标得分主键
     * @return 产品指标得分
     */
    @Override
    public SkuMetricsScore selectSkuMetricsScoreById(Long id) {
        return skuMetricsScoreMapper.selectSkuMetricsScoreById(id);
    }

    /**
     * 查询产品指标得分列表
     *
     * @param skuMetricsScore 产品指标得分
     * @return 产品指标得分
     */
    @Override
    public List<SkuMetricsScore> selectSkuMetricsScoreList(SkuMetricsScore skuMetricsScore) {
        return skuMetricsScoreMapper.selectSkuMetricsScoreList(skuMetricsScore);
    }

    /**
     * 新增产品指标得分
     *
     * @param skuMetricsScore 产品指标得分
     * @return 结果
     */
    @Override
    public int insertSkuMetricsScore(SkuMetricsScore skuMetricsScore) {
        return skuMetricsScoreMapper.insertSkuMetricsScore(skuMetricsScore);
    }

    /**
     * 修改产品指标得分
     *
     * @param skuMetricsScore 产品指标得分
     * @return 结果
     */
    @Override
    public int updateSkuMetricsScore(SkuMetricsScore skuMetricsScore) {
        return skuMetricsScoreMapper.updateSkuMetricsScore(skuMetricsScore);
    }

    /**
     * 批量删除产品指标得分
     *
     * @param ids 需要删除的产品指标得分主键
     * @return 结果
     */
    @Override
    public int deleteSkuMetricsScoreByIds(Long[] ids) {
        return skuMetricsScoreMapper.deleteSkuMetricsScoreByIds(ids);
    }

    /**
     * 删除产品指标得分信息
     *
     * @param id 产品指标得分主键
     * @return 结果
     */
    @Override
    public int deleteSkuMetricsScoreById(Long id) {
        return skuMetricsScoreMapper.deleteSkuMetricsScoreById(id);
    }
}
